[C] Listas Duplamente Encadeadas
Publicado por Enzo de Brito Ferber 09/04/2006
[ Hits: 9.310 ]
Homepage: http://www.maximasonorizacao.com.br
Codigo de fácil entendimento com funçoes de inserçao em ordem crescente, retirada, e outras :).... Muito bom
/* * Programa: Listas Duplamente Encadeadas * Arquivo : lde.c * Autor : Enzo Ferber 'Slackware_10' */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define MALLOC(a) (a*)malloc(sizeof(a)) struct node{ int info; struct node *next; struct node *prior; }; struct node *head; struct node *last; void display(void); void menu(void); void push(int); void pop(int); void ins(void); void del(void); void clear(void); void flush(void); int length(void); void push(int valor){ struct node *novo; struct node *current; current = head; novo = MALLOC(struct node); if(!head){ novo->info = valor; novo->next = NULL; novo->prior = NULL; head = last = novo; } if(valor > last->info){ novo->info = valor; novo->next = NULL; novo->prior = last; last->next = novo; last = novo; return; } if(valor < head->info){ novo->info = valor; novo->next = head; novo->prior = NULL; head->prior = novo; head = novo; return; } while(current){ if(current->info > valor){ novo->info = valor; novo->next = current; novo->prior = current->prior; current->prior->next = novo; current->prior = novo; } current = current->next; } } void pop(int valor){ struct node *current; current = head; if(valor == head->info){ head = head->next; free(head->prior); return; } if(valor == last->info){ last = last->prior; free(last->next); return; } while(current){ if(current->info == valor){ current->prior->next = current->next; current->next->prior = current->prior; free(current); return; } current = current->next; } } void display(void){ struct node *aux; aux = head; if(!head){ clear(); printf("Pilha vazia."); getchar(); getchar(); return; } clear(); while(aux){ printf("%d\n", aux->info); aux = aux->next; } getchar(); getchar(); } void ins(void){ int valor; clear(); printf("Valor: "); flush(); scanf("%d", &valor); push(valor); } void del(void){ int valor; clear(); printf("Valor: "); flush(); scanf("%d", &valor); pop(valor); } void flush(void){ fflush(stdin); } void clear(void){ system("cls"); } void menu(void){ int op; while(1){ clear(); //limpa a tela printf("\n\tLitas duplamente encadeadas\n\n"); printf("\t1. Inserir\n"); printf("\t2. Retirar\n"); printf("\t3. Mostar\n"); printf("\t4. Sair\n\n"); printf("\tSua opcao: "); flush(); //limpa o buffer de entrada do teclado scanf("%d", &op); //le de 'stdin' um valor inteiro e armazena em 'op' switch(op){ //faz um 'switch' com o valor de op case 1: ins(); break; case 2: del(); break; case 3: display(); break; case 4: free(head); free(last); exit(0); default: clear(); printf("Opcao invalida"); getchar(); } } } int main(void){ head = last = NULL; menu(); return 0; }
Função "Partição de Inteiros" Recursiva SEM Tabela Estática em C
Pilhas Encadeadas Detalhadamente
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (1)
Mensagem quando tento fazer o apt update && apt upgrade no kal... (2)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta